using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

using MakeIT.Framework.Util;
using MakeIT.SGI.ERP.Entidades;
using MakeIT.SGI.ERP.Negocios;

namespace MakeIT.SGI.ERP.Apresentacao
{
	public partial class CadastroPerfil : System.Web.UI.Page
	{

		UsuarioVO usuarioVO = null;
        protected SgiDAOT SgiDAOT = null;

        protected void Page_Load(object sender, EventArgs e)
        {
            this.SgiDAOT = new SgiDAOT();
			usuarioVO = (UsuarioVO)this.Session["userActive"];

			if (!IsPostBack)
			{
				Util.HabilitarCampos(false, this.panelCad);
			    atualizarDdlidFilial(null, null);


				this.panelPerfilxobjeto.Enabled = false;


                this.panelPerfilxusuario.Enabled = false;

			}

		}

        protected void Page_Unload(object sender, EventArgs e)
        {
            try
            {
                if (this.SgiDAOT != null)
                    this.SgiDAOT.closeDAO();
            }
            catch (Exception ex) { }
        }

		protected void atualizarDdlidFilial(object sender, ImageClickEventArgs e)
		{
            CarregaDDL.carregaFilial(this.SgiDAOT, this.ddlCadIdFilial);

            CarregaDDL.carregaFilial(this.SgiDAOT, this.ddlIdFilial);
		}
		
		
		/// <summary>
		/// Manipula o evento do botão btnSalvar
		/// </summary>
		/// <param name="sender">Objeto disparador do evento</param>
		/// <param name="e">Argumento do evento</param>
		protected void btnSalvar_Click(object sender, EventArgs e)
		{
			//Declara objetos
			PerfilVO perfilVO = null;
			bool novoRegistro = false;

			try
			{
				//Verifica se o ID é nulo, se sim = cadastro novo
				if (string.IsNullOrEmpty(this.txtCadIdPerfil.Text))
				{
					perfilVO = PerfilVO.CreateVO();
					perfilVO.cadastro = DateTime.Now;
					perfilVO.cadastradoPor = usuarioVO.user;

					novoRegistro = true;

				}
				//Recupera dados para serem alterados
				else
				{
					//Recupera dados
					perfilVO = SgiDAOT.getPerfil(Int32.Parse(this.txtCadIdPerfil.Text));
				}

				perfilVO.perfil = this.txtCadPerfil.Text;
				perfilVO.idFilial = Int32.Parse(this.ddlCadIdFilial.SelectedValue);
				perfilVO.edicao = DateTime.Now;
				perfilVO.editadoPor = usuarioVO.user;

				//Chama metodo para salvar ou criar novo registro
                if (verificaPerfilExistente())
                {
                    if (novoRegistro)
                        perfilVO.idPerfil = (int)SgiDAOT.newPerfil(perfilVO);
                    else
                        SgiDAOT.setPerfil(perfilVO);

                    // Exibe msg de sucesso ao salvar registro
                    Util.ExibeAlert(this, "Registro salvo com sucesso!");
                }
                else
                {
                    return;
                }
				//Popula grid atualizado
				this.btnPesquisa_Click(null, null);

				//Atualiza formulario, apos salvar os dados
				this.txtCadIdPerfil.Text = perfilVO.idPerfil.ToString();
				this.ltCadastradoPor.Text = perfilVO.cadastradoPor;
				this.ltEditadoPor.Text = perfilVO.editadoPor;
				this.ltDataCadastro.Text = perfilVO.cadastro.ToString("dd/MM/yyyy");
				this.ltDataEdicao.Text = perfilVO.edicao.ToString("dd/MM/yyyy");

				//habilita Perfilxobjeto
				if (!this.panelPerfilxobjeto.Enabled)
				{
					this.ltCadPerfilxobjetoPerfil.Text = perfilVO.ToString();
					Util.HabilitarCampos(false, this.panelPerfilxobjeto);
					this.panelPerfilxobjeto.Enabled = true;
                    this.btnCadPerfilxobjetoSalvar.Enabled = false;
                    this.btnCadPerfilxobjetoEditar.Enabled = true;
				}
                carregaPerfilXObjetos();

				//habilita Perfilxusuario
				if (!this.panelPerfilxusuario.Enabled)
				{
					this.ltCadPerfilxusuarioPerfil.Text = perfilVO.ToString();
					Util.HabilitarCampos(false, this.panelPerfilxusuario);
					this.panelPerfilxusuario.Enabled = true;
					this.btnCadPerfilxUsuarioSalvar.Enabled = false;
					this.btnCadPerfilxUsuarioEditar.Enabled = true;
				}
                carregaPerfilxUsuarios();

			}
			catch (Exception ex)
			{

				throw ex;
			}
		}

		/// <summary>
		/// Manipula o evento do botão btnPesquisa
		/// </summary>
		/// <param name="sender">Objeto disparador do evento</param>
		/// <param name="e">Argumento do evento</param>
		protected void btnPesquisa_Click(object sender, EventArgs e)
		{

			//Declara objetos
			int? idPerfil = null;
			string perfil = null;
			int? idFilial = null;

			try
			{

				if (!string.IsNullOrEmpty(this.txtIdPerfil.Text))
				{
					idPerfil = Int32.Parse(this.txtIdPerfil.Text);
				}

				if (!string.IsNullOrEmpty(this.txtPerfil.Text))
				{
					perfil = this.txtPerfil.Text;
				}

				if(!this.ddlIdFilial.SelectedValue.Equals("-1"))
				{
					idFilial = Int32.Parse(this.ddlIdFilial.SelectedValue);
				}


				//Recupera a lista de registros segundo a pesquisa
				this.grvResultado.DataSource = SgiDAOT.getPerfils(idPerfil, perfil, idFilial);

				//Vincula os dados
				this.grvResultado.DataBind();
			}
			catch (Exception ex)
			{

				throw ex;
			}
		}

		/// <summary>
		/// Manipula o evento do botão btnCancelar
		/// </summary>
		/// <param name="sender">Objeto disparador do evento</param>
		/// <param name="e">Argumento do evento</param>
		protected void btnCancelar_Click(object sender, EventArgs e)
		{
			//Volta para a tab page de pesquisa
			//this.tabPerfil.ActiveTabIndex = 0;

			// Desabilita os campos para edição
			Util.HabilitarCampos(false, this.panelCad);

			// Destrava botão de edição
			this.btnEditar.Enabled = (!string.IsNullOrEmpty(this.txtCadIdPerfil.Text));

			// Destrava botão de exclusao
			this.btnExcluir.Enabled = (!string.IsNullOrEmpty(this.txtCadIdPerfil.Text));

			// Detrava botão de novo
			this.btnNovo.Enabled = true;

			// Desabilita o botão salvar
			this.btnSalvar.Enabled = false;

		}

		protected void imgbVisualizar_Click(object sender, ImageClickEventArgs e)
		{
			// Declara objetos
			PerfilVO perfilVO = null;
			int idPerfil = 0;

			try
			{
				//Recupera os argumentos com o ID do objeto
				string[] argumentos = ((ImageButton)sender).CommandArgument.Split(';');
				idPerfil = Int32.Parse(argumentos[0]);

				//Recupera o objeto
				perfilVO = SgiDAOT.getPerfil(idPerfil);

				this.txtCadIdPerfil.Text = perfilVO.idPerfil.ToString();
				this.txtCadPerfil.Text = perfilVO.perfil;
				this.ddlCadIdFilial.SelectedValue = perfilVO.idFilial.ToString();
				this.ltCadastradoPor.Text = perfilVO.cadastradoPor;
				this.ltEditadoPor.Text = perfilVO.editadoPor;
				this.ltDataCadastro.Text = perfilVO.cadastro.ToString("dd/MM/yyyy");
				this.ltDataEdicao.Text = perfilVO.edicao.ToString("dd/MM/yyyy");

				//recupera Perfilxobjeto
                Util.HabilitarCampos(false, this.panelPerfilxobjeto);
                this.panelPerfilxobjeto.Enabled = true;
                this.ltCadPerfilxobjetoPerfil.Text = perfilVO.ToString();
                this.btnCadPerfilxobjetoSalvar.Enabled = false;
                this.btnCadPerfilxobjetoEditar.Enabled = true;

                carregaPerfilXObjetos();
                this.gvPerfilXObjetos.Enabled = false;

				//recupera Perfilxusuario
				Util.HabilitarCampos(false, this.panelPerfilxusuario);
				this.panelPerfilxusuario.Enabled = true;
				this.ltCadPerfilxusuarioPerfil.Text = perfilVO.ToString();
				this.btnCadPerfilxUsuarioSalvar.Enabled = false;
				this.btnCadPerfilxUsuarioEditar.Enabled = true;

                carregaPerfilxUsuarios();
                this.gvPerfilxUsuarios.Enabled = false;

				//Habilita tab page do cadastro
				this.tabPerfil.ActiveTabIndex = 1;

				//Desabilita campos para edição
				Util.HabilitarCampos(false, this.panelCad);

				//Desabilita botão salvar
				this.btnSalvar.Enabled = false;

				//Habilita botão editar
				this.btnEditar.Enabled = true;

				//Habilita botão excluir
				this.btnExcluir.Enabled = true;

				//Habilita botão novo
				this.btnNovo.Enabled = true;

			}
			catch (Exception ex)
			{

				throw ex;
			}
		}

		// <summary>
		// Manipula o evento editar do web form
		// </summary>
		// <param name="sender">Objeto disparador de evento</param>
		// <param name="e">Argumento do evento</param>
		protected void btnEditar_Click(object sender, EventArgs e)
		{
			// Habilita os campos para edição
			Util.HabilitarCampos(true, this.panelCad);

			// Trava apenas os text box da PK
			this.txtCadIdPerfil.Enabled = false;

			// Trava botão de edição
			this.btnEditar.Enabled = false;

			// Trava botão de exclusao
			this.btnExcluir.Enabled = false;

			// Trava botão de novo
			this.btnNovo.Enabled = false;

			// Habilita o botão salvar
			this.btnSalvar.Enabled = true;

			this.txtCadPerfil.Focus();
		}

		protected void btnNovo_Click(object sender, EventArgs e)
		{
			//Limpa formulario, para a entrada de novo registro
			Util.LimparCampos(this.panelCad);
			// Habilita os campos para edição
			Util.HabilitarCampos(true, this.panelCad);

			this.ltCadastradoPor.Text = "";
			this.ltEditadoPor.Text = "";
			this.ltDataCadastro.Text = "";
			this.ltDataEdicao.Text = "";

			// Limpa Perfilxobjeto
			Util.LimparCampos(this.panelPerfilxobjeto);
			Util.HabilitarCampos(false, this.panelPerfilxobjeto);
            //this.ltCadPerfilxobjetoPerfil.Text = "";
            //this.ltPerfilxobjetoCadastradoPor.Text = "";
            //this.ltPerfilxobjetoDataCadastro.Text = "";
            //this.ltPerfilxobjetoDataEdicao.Text = "";
            //this.ltPerfilxobjetoEditadoPor.Text = "";
            //this.grvCadPerfilxPerfilxobjeto.DataSource = null;
            //this.grvCadPerfilxPerfilxobjeto.DataBind();
            //this.panelPerfilxobjeto.Enabled = false;
            //this.btnCadPerfilxobjetoSalvar.Enabled = false;
            //this.btnCadPerfilxobjetoEditar.Enabled = false;
            //this.btnCadPerfilxobjetoExcluir.Enabled = false;
            //this.btnCadPerfilxobjetoNovo.Enabled = false;

			// Limpa Perfilxusuario
			Util.LimparCampos(this.panelPerfilxusuario);
			Util.HabilitarCampos(false, this.panelPerfilxusuario);
            //this.ltCadPerfilxusuarioPerfil.Text = "";
            //this.ltPerfilxusuarioCadastradoPor.Text = "";
            //this.ltPerfilxusuarioDataCadastro.Text = "";
            //this.ltPerfilxusuarioDataEdicao.Text = "";
            //this.ltPerfilxusuarioEditadoPor.Text = "";
            //this.grvCadPerfilxPerfilxusuario.DataSource = null;
            //this.grvCadPerfilxPerfilxusuario.DataBind();
            //this.panelPerfilxusuario.Enabled = false;
            //this.btnCadPerfilxusuarioSalvar.Enabled = false;
            //this.btnCadPerfilxusuarioEditar.Enabled = false;
            //this.btnCadPerfilxusuarioExcluir.Enabled = false;
            //this.btnCadPerfilxusuarioNovo.Enabled = false;

			// Trava apenas os text box da PK
			this.txtCadIdPerfil.Enabled = false;

			// Trava botão de edição
			this.btnEditar.Enabled = false;

			// Trava botão de exclusao
			this.btnExcluir.Enabled = false;

			// Trava botão de novo
			this.btnNovo.Enabled = false;

			// Habilita o botão salvar
			this.btnSalvar.Enabled = true;

			this.txtCadPerfil.Focus();

		}

		protected void btnExcluir_Click(object sender, EventArgs e)
		{
			//Declara objetos
			PerfilVO perfilVO = null;

			try
			{
				//Cria objeto
				perfilVO = PerfilVO.CreateVO();
				perfilVO.idPerfil = Int32.Parse(this.txtCadIdPerfil.Text);

				// Remove Perfilxobjeto
				List<PerfilxobjetoVO> perfilxobjetoVOs = SgiDAOT.getPerfilxobjetos(null, perfilVO.idPerfil, null, null, null);
				foreach (PerfilxobjetoVO perfilxobjetoVO in perfilxobjetoVOs)
					SgiDAOT.delPerfilxobjeto(perfilxobjetoVO);

				// Remove Perfilxusuario
				List<PerfilxusuarioVO> perfilxusuarioVOs = SgiDAOT.getPerfilxusuarios(null, perfilVO.idPerfil, null);
				foreach (PerfilxusuarioVO perfilxusuarioVO in perfilxusuarioVOs)
					SgiDAOT.delPerfilxusuario(perfilxusuarioVO);

				//Chama metodo para excluir registro
				SgiDAOT.delPerfil(perfilVO);

				// Exibe msg de sucesso ao salvar registro
				Util.ExibeAlert(this, "Registro excluido com sucesso!");

				//Popula grid atualizado
				this.btnPesquisa_Click(null, null);

				//Limpa formulario, apos salvar os dados
				Util.LimparCampos(this.panelCad);


				//Limpa Perfilxobjeto
				Util.LimparCampos(this.panelPerfilxobjeto);
				Util.HabilitarCampos(false, this.panelPerfilxobjeto);
				this.panelPerfilxobjeto.Enabled = false;
                //this.ltCadPerfilxobjetoPerfil.Text = "";
                //this.ltPerfilxobjetoCadastradoPor.Text = "";
                //this.ltPerfilxobjetoDataCadastro.Text = "";
                //this.ltPerfilxobjetoDataEdicao.Text = "";
                //this.ltPerfilxobjetoEditadoPor.Text = "";
                //this.grvCadPerfilxPerfilxobjeto.DataSource = null;
                //this.grvCadPerfilxPerfilxobjeto.DataBind();
                //this.btnCadPerfilxobjetoSalvar.Enabled = false;
                //this.btnCadPerfilxobjetoEditar.Enabled = false;
                //this.btnCadPerfilxobjetoExcluir.Enabled = false;
                //this.btnCadPerfilxobjetoNovo.Enabled = false;

				//Limpa Perfilxusuario
				Util.LimparCampos(this.panelPerfilxusuario);
				Util.HabilitarCampos(false, this.panelPerfilxusuario);
				this.panelPerfilxusuario.Enabled = false;
                //this.ltCadPerfilxusuarioPerfil.Text = "";
                //this.ltPerfilxusuarioCadastradoPor.Text = "";
                //this.ltPerfilxusuarioDataCadastro.Text = "";
                //this.ltPerfilxusuarioDataEdicao.Text = "";
                //this.ltPerfilxusuarioEditadoPor.Text = "";
                //this.grvCadPerfilxPerfilxusuario.DataSource = null;
                //this.grvCadPerfilxPerfilxusuario.DataBind();
                //this.btnCadPerfilxusuarioSalvar.Enabled = false;
                //this.btnCadPerfilxusuarioEditar.Enabled = false;
                //this.btnCadPerfilxusuarioExcluir.Enabled = false;
                //this.btnCadPerfilxusuarioNovo.Enabled = false;

				this.ltCadastradoPor.Text = "";
				this.ltEditadoPor.Text = "";
				this.ltDataCadastro.Text = "";
				this.ltDataEdicao.Text = "";

				// Trava botão de edição
				this.btnEditar.Enabled = false;

				// Trava botão de exclusao
				this.btnExcluir.Enabled = false;

				// Desabilita o botão salvar
				this.btnSalvar.Enabled = false;

				// Habilita o botao novo
				this.btnNovo.Enabled = true;

			}
			catch (Exception ex)
			{

				throw ex;
			}
			
		}


        protected bool verificaPerfilExistente()
        {
            List<PerfilVO> pVOLista = SgiDAOT.getPerfils(null, null, txtCadPerfil.Text, Convert.ToInt32(ddlCadIdFilial.SelectedValue));

            if (pVOLista == null || (pVOLista.Count == 0) || (pVOLista.Count == 1 && txtCadIdPerfil.Text.Equals(pVOLista[0].idPerfil.ToString())))
            {
                return true;
            }
            else
            {
                Util.ExibeAlert(this, "Não foi possivel Salvar! Nome de Perfil já cadastrado para esta filial!");
                return false;
            }
        }
         
		#region PerfilXPerfilxobjeto

        protected void carregaPerfilXObjetos()
        {
            gvPerfilXObjetos.DataSource = SgiDAOT.getObjetos();
            gvPerfilXObjetos.DataBind();
        }

        protected void gvPerfilXObjetos_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                if (!String.IsNullOrEmpty(txtCadIdPerfil.Text))
                {
                    int idObjeto = int.Parse(((HiddenField)e.Row.FindControl("hfIdObjeto")).Value);
                    int idPerfil = int.Parse(txtCadIdPerfil.Text);

                    PerfilxobjetoVO poVO = SgiDAOT.getPerfilxobjeto(null, idPerfil, idObjeto);

                    if (poVO != null)
                    {
                        CheckBox cb = (CheckBox)e.Row.FindControl("cbVisivel");
                        if ((bool)poVO.visivel)
                            cb.Checked = true;

                        cb = (CheckBox)e.Row.FindControl("cbHabilitado");
                        if ((bool)poVO.habilitado)
                            cb.Checked = true;
                    }
                }
            }
        }

        protected void deletePerfilXObjetos()
        {
            try
            {
                if (!String.IsNullOrEmpty(txtCadIdPerfil.Text))
                {
                    int idUsuario = int.Parse(txtCadIdPerfil.Text);
                    foreach (UsuarioxobjetoVO uoVO in SgiDAOT.getUsuarioxobjetos(null, idUsuario, null))
                    {
                        SgiDAOT.delUsuarioxobjeto(uoVO);
                    }
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }


        protected void btnCadPerfilxobjetoSalvar_Click(object sender, EventArgs e)
        {
            try
            {
                this.SgiDAOT.transactionBegin();

                foreach (GridViewRow row in gvPerfilXObjetos.Rows)
                {
                    if (!String.IsNullOrEmpty(txtCadIdPerfil.Text))
                    {
                        int idObjeto = int.Parse(((HiddenField)row.FindControl("hfIdObjeto")).Value);
                        int idPerfil = int.Parse(txtCadIdPerfil.Text);

                        CheckBox cb1 = (CheckBox)row.FindControl("cbVisivel");
                        CheckBox cb2 = (CheckBox)row.FindControl("cbHabilitado");

                        PerfilxobjetoVO poVO = SgiDAOT.getPerfilxobjeto(null, idPerfil, idObjeto);


                        if (cb1.Checked || cb2.Checked)
                        {
                            PerfilxobjetoVO poVOAcao = PerfilxobjetoVO.CreateVO();


                            poVOAcao.idPerfil = idPerfil;
                            poVOAcao.idObjeto = idObjeto;
                            poVOAcao.visivel = cb1.Checked;
                            poVOAcao.habilitado = cb2.Checked;


                            poVOAcao.editadoPor = this.usuarioVO.user;
                            poVOAcao.edicao = DateTime.Now;

                            if (poVO != null)
                            {
                                poVOAcao.idPerfilXObjeto = poVO.idPerfilXObjeto;
                                SgiDAOT.setPerfilxobjeto(poVOAcao);
                            }
                            else
                            {
                                poVOAcao.cadastradoPor = this.usuarioVO.user;
                                poVOAcao.cadastro = DateTime.Now;

                                SgiDAOT.newPerfilxobjeto(poVOAcao);
                            }
                        }
                        else
                        {
                            if (poVO != null)
                            {
                                SgiDAOT.delPerfilxobjeto(poVO);
                            }
                        }
                    }
                }

                this.SgiDAOT.transactionCommit();

                // Exibe msg de sucesso ao salvar registro
                Util.ExibeAlert(this, "Registro salvo com sucesso!");



            }
            catch (Exception ex1)
            {
                try
                {
                    if (this.SgiDAOT != null)
                        this.SgiDAOT.transactionRollBack();
                    Util.ExibeAlert(this, "Registro NÃO salvo! Erro: " + ex1.Message);
                }
                catch (Exception ex2)
                {
                    Util.ExibeAlert(this, "Problema inesperado ao salvar! Erro: " + ex2.Message);
                }
            }


        }

        protected void btnCadPerfilxobjetoCancelar_Click(object sender, EventArgs e)
        {
            //Volta para a tab page de pesquisa
            //this.tabUsuario.ActiveTabIndex = 0;

            // Desabilita os campos para edição
            Util.HabilitarCampos(false, this.panelPerfilxobjeto);

            this.btnCadPerfilxobjetoEditar.Enabled = true;

            // Desabilita o botão salvar
            this.btnCadPerfilxobjetoSalvar.Enabled = false;

            this.gvPerfilXObjetos.Enabled = false;

        }

        protected void btnCadPerfilxobjetoEditar_Click(object sender, EventArgs e)
        {
            // Habilita os campos para edição
            Util.HabilitarCampos(true, this.panelPerfilxobjeto);

            this.btnCadPerfilxobjetoEditar.Enabled = false;

            this.btnCadPerfilxobjetoSalvar.Enabled = true;

            this.gvPerfilXObjetos.Enabled = true;
        }




        protected void cbVisivelTodos_CheckedChanged(object sender, EventArgs e)
        {
            foreach (GridViewRow row in gvPerfilXObjetos.Rows)
            {
                CheckBox cb = (CheckBox)row.FindControl("cbVisivel");
                cb.Checked = ((CheckBox)sender).Checked;
            }
        }

        protected void cbHabilitadoTodos_CheckedChanged(object sender, EventArgs e)
        {
            foreach (GridViewRow row in gvPerfilXObjetos.Rows)
            {
                CheckBox cb = (CheckBox)row.FindControl("cbHabilitado");
                cb.Checked = ((CheckBox)sender).Checked;
            }
        }

        protected void btnResetVisivel_Click(object sender, ImageClickEventArgs e)
        {
            resetCheckBoxObjeto("cbVisivelTodos", "cbVisivel", 1);
        }

        protected void btnResetHabilitado_Click(object sender, ImageClickEventArgs e)
        {
            resetCheckBoxObjeto("cbHabilitadoTodos", "cbHabilitado", 2);
        }

        protected void resetCheckBoxObjeto(string IdCheckBoxPai, string IdCheckBoxFilho, int campo)
        {
            CheckBox cb = null;
            cb = (CheckBox)gvPerfilXObjetos.HeaderRow.FindControl(IdCheckBoxPai);
            cb.Checked = false;

            foreach (GridViewRow row in gvPerfilXObjetos.Rows)
            {
                if (!String.IsNullOrEmpty(txtCadIdPerfil.Text))
                {

                    int idObjeto = int.Parse(((HiddenField)row.FindControl("hfIdObjeto")).Value);
                    int idUsuario = int.Parse(txtCadIdPerfil.Text);

                    PerfilxobjetoVO poVO = SgiDAOT.getPerfilxobjeto(null, idUsuario, idObjeto);

                    cb = (CheckBox)row.FindControl(IdCheckBoxFilho);

                    if (poVO != null)
                    {
                        if (noCheckModelObjeto(campo, poVO))
                            cb.Checked = true;
                        else
                            cb.Checked = false;
                    }
                    else
                    {
                        cb.Checked = false;
                    }
                }
            }
        }

        protected bool noCheckModelObjeto(int campo, PerfilxobjetoVO perfilxobjetoVO)
        {
            switch (campo)
            {
                case 1:
                    return (bool)perfilxobjetoVO.visivel;
                case 2:
                    return (bool)perfilxobjetoVO.habilitado;
                default:
                    return (bool)perfilxobjetoVO.habilitado;
            }
        }

		#endregion

        #region PerfilXUsuarioxPerfil



        protected void carregaPerfilxUsuarios()
        {
            List<UsuarioVO> usuarioVOLista = new List<UsuarioVO>();

            if (!String.IsNullOrEmpty(txtCadIdPerfil.Text))
            {
                foreach (FilialVO fVOItem in SgiDAOT.getFilials(SgiDAOT.getPerfil(Convert.ToInt32(this.txtCadIdPerfil.Text)).idFilial))
                {
                    foreach (PessoaVO pVOItem in SgiDAOT.getPessoas(null, null, fVOItem.idFilial, null, null))
                    {
                        foreach (UsuarioVO uVOItem in SgiDAOT.getUsuarios(null, pVOItem.idPessoa, null, null))
                        {
                            usuarioVOLista.Add(uVOItem);
                        }
                    }
                }
            }

            gvPerfilxUsuarios.DataSource = usuarioVOLista;
            gvPerfilxUsuarios.DataBind();
        }

        protected void gvPerfilxUsuarios_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                if (!String.IsNullOrEmpty(txtCadIdPerfil.Text))
                {
                    int idUsuario = int.Parse(((HiddenField)e.Row.FindControl("hfIdPerfil")).Value);
                    int idPerfil = int.Parse(txtCadIdPerfil.Text);

                    PerfilxusuarioVO puVO = SgiDAOT.getPerfilxusuario(null, idPerfil, idUsuario);

                    if (puVO != null)
                    {
                        CheckBox cb = (CheckBox)e.Row.FindControl("cbPertence");
                        cb.Checked = true;
                    }
                }
            }
        }



        protected void btnCadPerfilxUsuarioSalvar_Click(object sender, EventArgs e)
        {
            try
            {
                this.SgiDAOT.transactionBegin();

                foreach (GridViewRow row in gvPerfilxUsuarios.Rows)
                {
                    if (!String.IsNullOrEmpty(txtCadIdPerfil.Text))
                    {
                        int idUsuario = int.Parse(((HiddenField)row.FindControl("hfIdPerfil")).Value);
                        int idPerfil = int.Parse(txtCadIdPerfil.Text);

                        CheckBox cb1 = (CheckBox)row.FindControl("cbPertence");

                        PerfilxusuarioVO puVO = SgiDAOT.getPerfilxusuario(null, idPerfil, idUsuario);


                        if (cb1.Checked)
                        {
                            PerfilxusuarioVO puVOAcao = PerfilxusuarioVO.CreateVO();


                            puVOAcao.idUsuario = idUsuario;
                            puVOAcao.idPerfil = idPerfil;


                            puVOAcao.editadoPor = this.usuarioVO.user;
                            puVOAcao.edicao = DateTime.Now;

                            if (puVO != null)
                            {
                                puVOAcao.idPerfilXUsuario = puVO.idPerfilXUsuario;
                                SgiDAOT.setPerfilxusuario(puVOAcao);
                            }
                            else
                            {
                                puVOAcao.cadastradoPor = this.usuarioVO.user;
                                puVOAcao.cadastro = DateTime.Now;

                                SgiDAOT.newPerfilxusuario(puVOAcao);
                            }
                        }
                        else
                        {
                            if (puVO != null)
                            {
                                SgiDAOT.delPerfilxusuario(puVO);
                            }
                        }
                    }
                }

                this.SgiDAOT.transactionCommit();

                // Exibe msg de sucesso ao salvar registro
                Util.ExibeAlert(this, "Registro salvo com sucesso!");


            }
            catch (Exception ex1)
            {
                try
                {
                    if (this.SgiDAOT != null)
                        this.SgiDAOT.transactionRollBack();
                    Util.ExibeAlert(this, "Registro NÃO salvo! Erro: " + ex1.Message);
                }
                catch (Exception ex2)
                {
                    Util.ExibeAlert(this, "Problema inesperado ao salvar! Erro: " + ex2.Message);
                }
            }


        }

        protected void btnCadPerfilxusuarioCancelar_Click(object sender, EventArgs e)
        {

            // Desabilita os campos para edição
            Util.HabilitarCampos(false, this.panelPerfilxusuario);

            this.btnCadPerfilxUsuarioEditar.Enabled = true;

            // Desabilita o botão salvar
            this.btnCadPerfilxUsuarioSalvar.Enabled = false;

            this.gvPerfilxUsuarios.Enabled = false;

        }

        protected void btnCadPerfilxUsuarioEditar_Click(object sender, EventArgs e)
        {
            // Habilita os campos para edição
            Util.HabilitarCampos(true, this.panelPerfilxusuario);

            this.btnCadPerfilxUsuarioEditar.Enabled = false;

            this.btnCadPerfilxUsuarioSalvar.Enabled = true;

            this.gvPerfilxUsuarios.Enabled = true;
        }




        protected void cbPertenceTodos_CheckedChanged(object sender, EventArgs e)
        {
            foreach (GridViewRow row in gvPerfilxUsuarios.Rows)
            {
                CheckBox cb = (CheckBox)row.FindControl("cbPertence");
                cb.Checked = ((CheckBox)sender).Checked;
            }
        }

        protected void btnResetPertence_Click(object sender, ImageClickEventArgs e)
        {
            resetCheckBoxPerfil("cbPertenceTodos", "cbPertence");
        }

        protected void resetCheckBoxPerfil(string IdCheckBoxPai, string IdCheckBoxFilho)
        {
            CheckBox cb = null;
            cb = (CheckBox)gvPerfilxUsuarios.HeaderRow.FindControl(IdCheckBoxPai);
            cb.Checked = false;

            foreach (GridViewRow row in gvPerfilxUsuarios.Rows)
            {
                if (!String.IsNullOrEmpty(txtCadIdPerfil.Text))
                {

                    int idUsuario = int.Parse(((HiddenField)row.FindControl("hfIdPerfil")).Value);
                    int idPerfil = int.Parse(txtCadIdPerfil.Text);

                    PerfilxusuarioVO puVO = SgiDAOT.getPerfilxusuario(null, idPerfil, idUsuario);

                    cb = (CheckBox)row.FindControl(IdCheckBoxFilho);

                    if (puVO != null)
                    {
                        cb.Checked = true;
                    }
                    else
                    {
                        cb.Checked = false;
                    }
                }
            }
        }



        #endregion

	}
}
